package net.losjuegos.core.factories;

import net.losjuegos.core.dominios.AguaMineral;
import net.losjuegos.core.dominios.Bebida;
import net.losjuegos.core.dominios.Bebida.BebidaType;
import net.losjuegos.core.dominios.Cerveza;
import net.losjuegos.core.dominios.Champagne;
import net.losjuegos.core.dominios.Espumante;
import net.losjuegos.core.dominios.Fernet;
import net.losjuegos.core.dominios.Gaseosa;
import net.losjuegos.core.dominios.Jugo;
import net.losjuegos.core.dominios.Soda;
import net.losjuegos.core.dominios.Whiskey;

public class BebidaFactorySingleton {
	private static final BebidaFactorySingleton instance;

	static {
		try {
			instance = new BebidaFactorySingleton();
		} catch (Exception e) {
			throw new RuntimeException("Darn, an error occurred!", e);
		}
	}

	public static BebidaFactorySingleton getInstance() {
		return instance;
	}

	private BebidaFactorySingleton() {
		// ... cosas que har�a el contructor ... //
	}

	public Bebida crearBebida(BebidaType tipoBebida) {
		switch (tipoBebida) {
			case AguaMineral: return new AguaMineral();
			case Cerveza: return new Cerveza();
			case Champagne: return new Champagne();
			case Espumante: return new Espumante();
			case Fernet: return new Fernet();
			case Gaseosa: return new Gaseosa();
			case Jugo: return new Jugo();
			case Soda: return new Soda();
			case Whiskey: return new Whiskey();
		}
		throw new IllegalArgumentException("La bebida, de tipo " + tipoBebida
				+ " no es reconocida.");
	}

}
